package com.nuc.seckill.dao;

import com.nuc.seckill.base.CommonQueryBean;
import com.nuc.seckill.model.SeckillOrder;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * SeckillOrder数据库操作接口类
 *
 * @author spider
 */

@Repository
public interface SeckillOrderDao {


    /**
     * 查询（根据主键ID查询）
     *
     * @param id id
     * @return com.nuc.seckill.model.SeckillOrder
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    SeckillOrder selectByPrimaryKey(@Param("id") Long id);

    /**
     * 删除（根据主键ID删除）
     *
     * @param id id
     * @return int
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    int deleteByPrimaryKey(@Param("id") Long id);

    /**
     * 添加
     *
     * @param record 记录
     * @return int
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    int insert(SeckillOrder record);

    /**
     * 修改 （匹配有值的字段）
     *
     * @param record 记录
     * @return int
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    int updateByPrimaryKeySelective(SeckillOrder record);

    /**
     * list分页查询
     *
     * @param record 记录
     * @param query  查询条件
     * @return java.util.List<com.nuc.seckill.model.SeckillOrder>
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    List<SeckillOrder> list4Page(SeckillOrder record, @Param("commonQueryParam") CommonQueryBean query);

    /**
     * count查询
     *
     * @param record 记录
     * @return long
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    long count(SeckillOrder record);

    /**
     * list查询
     *
     * @param record 记录
     * @return java.util.List<com.nuc.seckill.model.SeckillOrder>
     * @author 石一歌
     * @date 2022/8/11 15:01
     */
    List<SeckillOrder> list(SeckillOrder record);

    /**
     * 重复订单加锁查询
     *
     * @param userId    用户id
     * @param productId 商品id
     * @return java.util.List<com.nuc.seckill.model.SeckillOrder>
     * @author 石一歌
     * @date 2022/8/12 23:07
     */
    List<SeckillOrder> listRepeatOrdersForUpdate(Long userId, Long productId);
}